#!/bin/bash

function validarFormatoRegistro {

	if [ ! `echo $registro | egrep -i "\<$char{5},$numP{11},$tipoDoc,$numP{9},$char{N},$char{N},$char{N},$char{N},$char{N},$fecha,$fecha\>"` ];
	then
		./gralog.sh postular "El registro $registros del archivo $archivo no tiene formato valido"  W
		((rechErrRegistro++))
		return 1
	fi

	return 0
}

function validacionesLogicas {
	
	#valido que este codigo de beneficio
	if [ ! ${campos[0]} ]; then
		echo 'Campo codigo de beneficio no informado' >> "$rutaAceptados/benerro.$pidPostular"	
	fi

	
	reg=`cat $archivoOrdenesCompra | egrep -i "\<$numOrden"`

	if [ ! $reg ]; then
		((rechOrdInexistente++))
		return 1
	fi

	#si es una compra cerrada rechazo el registro
	if [ `echo $reg | egrep "CERRADA"` ]; then
		((rechOrdCerrada++))
		return 1
	fi

	#valido el CUIT
	if [ ! `echo $reg | egrep -i "${campos[7]}" ` ]; then
		((rechOtros++))
		return 1
 	fi

	((aceptados++))
	return 0
}


function aceptarRegistro {

	#echo "${archivo#*.};${registro#*;}"  >> "$rutaAceptados/${archivo%%.*}.${registro%%;*}.$pidPostular"
	echo "${archivo#*.};${registro#*;}"  >> "$rutaAceptados/benef.$pidPostular"
	return 0;
}

function rechazarRegistro {

	echo $registro >> "$rutaAceptados/benerro.$pidPostular"
	
	return 0;
}

function obtenerNombreCompletoArchivo {
       archivoVersionMasAlta=`ls -r $1| egrep "$2.*" | head -1`
       archivoVersionMasAlta=`echo $archivoVersionMasAlta|tr -d \\n`       
}

#Ver si existe otro postular corriendo
pidPostular=$(pgrep -n ^postular$)
if [ -n "$pidPostular" ]; then
  echo "Postular ya se esta ejecutando con PID $pidPostular"
 ./gralog.sh postular "Postular ya se esta ejecutando con PID $pidPostular" E
 exit 1
fi

#Ver si se inicializo el ambiente
if [ -z "$grupo" ]; then
  echo "El ambiente no fue correctamente inicializado. Por favor ejecute postini."
 ./gralog.sh postular "El ambiente no fue correctamente inicializado." E
  exit 2
fi

rutaAceptados="$grupo/nuevos" 
#a ese directorio se envían:
# los nuevos en el archivo benef.$pidPostular
# los que no superan validación a nivel registro a benerro.$pidPostular
# los que no superan validación a nivel campo a benerro.$pidPostular
recibidos="$grupo/recibidos" #archivos a procesar
rechazados="$grupo/rechazados" #archivos ya procesados que llegan para procesar
yarecibidos="$grupo/procesados" #archivo que fueron procesados satisfactoriamente

#obtener la ruta del archivo de postulantes
obtenerNombreCompletoArchivo "$grupo/recibidos/" "*"
archivoPostulantes="$grupo/recibidos/$archivoVersionMasAlta"

#expresiones regulares comunes
char="[-a-z0-9.,$/!@&*%'?=:\_()]"
numP="[1-9][0-9]*"
numDec="[0-9]*(\.[0-9]*)?"
tipoDoc="DU|LC|LE|PA"
fecha


#Inicializar el log
cantArchivos=`ls -1 $recibidos | wc -l`
./gralog.sh postular "Inicio de Postular: Se procesaran $cantArchivos archivos"

#Para cada uno de los archivos en recibidos
for archivo in $(ls $recibidos); do

	echo; echo
	./gralog.sh postular "Archivo a procesar: $archivo"

	#Verificar que no sea un archivo ya procesado 
	if [ `ls -1 $grupo/yarecibidos | egrep "\<$archivo\>"` ]; then 
		./mover.sh "$recibidos/$archivo" "$rechazados"
		./gralog.sh postular "Archivo ya procesado: $archivo" W 
	else

		#cantidad de registros
		declare -i registros=0

		#cantidad de registros aceptados
		declare -i aceptados=0

		#cantidad de registros rechazados
                #por error de validacion a nivel registro
		declare -i rechErrRegistro=0

		#cantidad de registros rechazados
		#por error de validacion a nivel campo
		declare -i rechErrCampo=0

		#cantidad de registros rechazados
		#por otros motivos
		declare -i rechOtros=0

		#Para cada registro
		#cat $recibidos/$archivo | while read registro; do
		for registro in `cat $recibidos/$archivo`; do

			registros=$(($registros+1))
				
			# creo un array con todos los campos	
			IFS=',' read -ra campos <<< "$registro"

			#cuento los campos
			declare -i contador=0

			for campo in $campos; do

				((contador++))

			done 
			
			#verifico que no haya mas cantidad de campos de los que debe
   			if $contador > "11"; then 
				rechazarRegistro
				
			elif $contador < "9"; then #verifico que cumpla el minimo de campos
				rechazarRegistro
			else

				#Validar el registro y actuar en consecuencia
				if validarFormatoRegistro && validacionesLogicas; then
					aceptarRegistro 
				else 
					rechazarRegistro 
				fi
			fi

		#fin registro
		done

		#muevo el archivo y grabo en log
		./mover.sh "$recibidos/$archivo" "$yarecibidos"
		./gralog.sh postular "Cantidad de registros leidos: $registros"
		./gralog.sh postular "Cantidad de registros aceptados: $aceptados"
		./gralog.sh postular "Cantidad de registros rechazados por invalidos a nivel registro: $rechErrRegistro"
		./gralog.sh postular "Cantidad de registros rechazados por invalidos a nivel campo: $rechErrCampo"
		./gralog.sh postular "Cantidad de registros rechazados por otros motivos: $rechOtros"
	fi

#fin archivo
done

#Cerrar el log
./gralog.sh postular "Fin de Postular"
